package com.hbpu.usercenter.common;

import io.swagger.v3.oas.annotations.media.Schema;

/**
 * 返回工具类
 * <p>
 * 提供构建 {@link BaseResponse} 的快捷方法，封装了成功和失败的常用返回形式，
 * 避免在业务代码中重复创建响应对象。
 */
@Schema(description = "返回工具类 <p> 提供构建 {@link BaseResponse} 的快捷方法，封装了成功和失败的常用返回形式， 避免在业务代码中重复创建响应对象。")
public class ResultUtils {

    /**
     * 构建成功返回结果
     *
     * @param data 返回的数据
     * @param <T>  数据类型（泛型）
     * @return 包含状态码、数据、提示消息的成功响应
     */
    public static <T> BaseResponse<T> success(T data) {
        return new BaseResponse<>(0, data, "ok");
    }

    /**
     * 构建失败返回结果（基于错误码枚举）
     * @param errorCode 错误码枚举，包含状态码、错误消息和描述
     * @return 包含错误信息的失败响应
     */
    public static BaseResponse<?> error(ErrorCode errorCode) {
        return new BaseResponse<>(errorCode);
    }

    /**
     * 构建失败返回结果（自定义错误信息）
     *
     * @param code        状态码
     * @param message     错误提示消息
     * @param description 错误描述
     * @return 包含错误信息的失败响应
     */
    public static BaseResponse<?> error(int code, String message, String description) {
        return new BaseResponse<>(code, null, message, description);
    }

    /**
     * 构建失败返回结果（基于错误码枚举，并自定义消息与描述）
     *
     * @param errorCode   错误码枚举，提供状态码
     * @param message     自定义提示消息
     * @param description 自定义错误描述
     * @return 包含错误信息的失败响应
     */
    public static BaseResponse<?> error(ErrorCode errorCode, String message, String description) {
        return new BaseResponse<>(errorCode.getCode(), null, message, description);
    }

    /**
     * 构建失败返回结果（基于错误码枚举，并自定义描述）
     *
     * @param errorCode   错误码枚举，提供状态码和消息
     * @param description 自定义错误描述
     * @return 包含错误信息的失败响应
     */
    public static BaseResponse<?> error(ErrorCode errorCode, String description) {
        return new BaseResponse<>(errorCode.getCode(), null, errorCode.getMessage(), description);
    }
}
